Introduction

CD-DA X-Tractor is a lightweight, fast, and free program for digitally extracting audio from CD-roms, written for 32-bit Windows platforms (95/98/2000/NT). If the CD-rom unit on your computer supports Digital Audio Extraction and has an ASPI manager installed, CD-DA X-Tractor can directly read the audio from your music CD-roms and store it on your hard drive in either WAV, MP3 or Ogg Vorbis format. Under Windows NT and 2000, it can even work without an ASPI manager via the SCSI passthrough interface. For MP3 encoding, the BladeEncoder DLL and LAME Encoder DLLs are both supported. It works on most all ATAPI (IDE) CD-roms, and on some SCSI and CD-R/RW devices.

CD-DA X-Tractor has its roots in AKRip, a small, command-line based ripper. It's main goals are to be small, fast and free.

CD-DA X-Tractor screenshot


Quick Start

The following instructions should get you ripping tracks in no time!

1. If you intend to rip and encode to the MP3 format, you can use lame_enc.dll (included), or you'll need to download and install the BladeEnc DLL. Download BladeEnc from here.

2. Start the program. The default location is Start->CD-DA X-Tractor->CD-DA X-Tractor.

3. Select a CD unit by pressing the Options button to bring up the CD options dialog. Place a CD into the CD drive on your computer and hit the "Refresh" button. You can cause CD-DA X-Tractor to automatically scan the TOC on startup by clicking on the Options Button on the toolbar and checking the Autoscan TOC checkbox.

4. Check your output directory and format. During the installation procedure, an "output" directory will be formed in the directory where you installed CD-DA X-Tractor. If you don't want to use this default, change it by clicking on the Options->Output Options menu item. This is also where you select the output encoder to use (Raw audio, WAV, Lame_enc, BladeEnc, Vorb_Enc).

5. Check the track(s) you want to rip. To select all tracks, click on the Edit->Select All menu item. To automatically check all tracks, check the "Autocheck track" checkbox in the Options.

6. If encoding to MP3 files, check the MP3 Options.

7. To edit the names of the tracks, either left click on the track name, and click on the Edit->Rename menu item, or right-click on the track name and select Rename from the popup menu.

8. If you have enabled ID3 tags in the MP3 options, you'll need to set the ID3 info for the CD. Click on the ID3 button to do this.

9. Click the Rip button to begin extracting all checked tracks.


Features

CD-DA X-Tractor Features

  • Supports the Ogg Vorbis codec! Ogg Vorbis is a new patent-free, open-source audio compression codec.
  • NT/2000: One of the first rippers to support NT/2000 natively -- no ASPI manager needed!
  • MP3: Can encode to MP3 using the BladeEnc encoder DLL. Simply download and copy BladeEnc.dll into the same folder where you installed CD-DA X-Tractor.
  • LAME support: can also use the LAME_ENC dll! You can download it either as source code or you can use the precompiled binary from CDEx.
  • "On-the-fly" encoding: Like its predecessor AKRip, CD-DA X-Tractor doesn't need to create an intermediate WAV file before encoding to MP3, but rather encodes directly to MP3.
  • Segment ripping: Can rip multiple tracks as a single track, or just a section of a single track
  • Jitter correction: Multiple modes for jitter correction, allowing custom settings for CD-rom units of different quality.
  • CDDB support
  • ID3v1 tagging: ID3v1 tags are a method of storing the artist's name, album name, track name, year, and genre in an MP3 file. Most MP3 player available today support ID3v1.
  • Source Code: Don't like something about CD-DA X-Tractor? Just curious, and want to see how it works? Full source code to the program is available under the GNU Public License.
  • Multithreaded: The read and encode process is multithreaded, allowing for maximum effeciency while reading and encoding to MP3.
  • Disables Autoplay and Autorun for CD's inserted while the program is running.


FAQ

Frequently Asked Questions

Q: What's an ASPI manager, and how do I know if I have one?
A: ASPI is an interface created by Adaptec, and is used by CD-DA X-Tractor to access the CD-ROM hardware. Windows 95 comes with the ASPI manager pre-installed, while NT does not. To tell if you have an ASPI manager installed, look for a file called WNASPI32.DLL in your Windows system directory (c:\windows\system or c:\winnt\system32 are common locations). For NT, it is usually supplied by the manufacturer of your SCSI adapter or devices -- unfortunately, not usually supplied for IDE devices under NT. Some ATAPI CD-R and CD-RW devices do however supply the ASPI manager, specifically so that it can interface with the CD-R and CD-RW burning software.
Q: Does CD-DA X-Tractor work without an ASPI manager?
A: Under Windows NT (SP 4+) and Windows 2000, CD-DA X-Tractor can use the SCSI pass through interface to gain low-level access to the CD unit. The preferred method is still via the ASPI manager, but since neither Windows 2000 nor NT has a built-in ASPI manager, this method is provided as a fall-back.
Q: What is "jitter", and just how does "jitter correction" work?
A: "Jitter" is a term used for the inherent uncertaintly in most CD-rom units, which is caused by the way audio is stored on a CD. Although one logical block on a CD takes up 2352 bytes, the amount of data stored in the block varies. For a data block, 2052 bytes are actual data, and the remaining 300 bytes are information used to accurately find the block. For audio, however, all 2352 bytes contain audio data -- there is no positioning information returned in the block read. When CDs first came out, they were used for audio, and it didn't matter if a CD player got within +/- 1/75 of a second of the intended start position. After it started, as long as the player kept reading, it could accurately read the data -- the problem only came about when initially seeking the start position.

"Jitter correction" is the process of trying to compensate for "jitter" in software. Generally, it involves using overlapping reads, and attempting to match the end of one read with the beginning of the next, so that there are no gaps in the data read. These gaps cause clicks and pops in the resulting WAV or MP3 file produced. For instance, the program might begin reading a track at block 1000 and read 27 blocks total. On the next read, it would issue a read command starting at 1024, and would try to match the end of the first read in the beginning of the second read. Once it finds a match, it would cut off the beginning of the second read, and use only the part after the match. In this way, you can eliminate the clicks and pops.

CD-DA X-Tractor has an additional, more sophisticated mode for jitter correction. It will attempt to issue many read commands quickly and buffer the output. When ripping with CD-DA X-Tractor, you can see this happening in the "Read buffer" gauge on the rip dialog -- it will attempt to buffer as much as it can quickly, and then wait for the encoder to process it. When the buffer is almost empty, it starts reading again. It only performs jitter correction after an error is reported by the CD unit. Most drives will read audio correctly as long as the drive doesn't stop reading for too long, and read commands are issued sequentially, ie. the next read starts immediately where the last read left off. Using this method results in a vast speed improvement over brute-force jitter correction.

Most of the time the "On Error" jitter correction mode will produce good results. However, if you still get clicks and pops using this setting, try using the "Always" setting. Some (higher-end) drives support a feature known as "Stream is Accurate" -- this means that consecutive reads are guaranteed to start where the last one left off.

Q: I can't seem to rip any tracks at all. Help!
A: Try resetting the jitter correction values to their defaults in the CD Options dialong (click on the "Reset" button). If that doesn't work, In the CD Options dialog, try using the "Autodetect" read algorithm. If it still doesn't work, try the others individually. If none of this helps, send an email to akey@users.sourceforge.net with the make and model of your CD rom, operating system (Win95/98/NT,2000), whether it's a SCSI, ATAPI, CD-R, etc. and a description of the problem. It's also possible that your drive simply doesn't support digital audio extraction -- while most SCSI drives support digital audio extraction, not all IDE drives do.
Q: I can rip, but it seems to rip very slowly.
A: Try checking the "On Error" jitter correction in the "CD Options" page. This mode is faster than the "Always" setting, and should produce results comparable to "Always".
Q: How can I tell if my CD supports digital audio extraction?
A: If CD-DA X-Tractor doesn't seem to work with your CD, try a different program -- you can find many shareware and freeware programs at www.dailymp3.com. MP3.com has also been known to maintain a list of drives known to work or not work for DAE.
Q: I'm still getting clicks and pops in the ripped tracks. What can I do?
A: Go to the CD Options page by selecting the Options->CD Settings menu item. Try using the "Always" setting for jitter correction -- this setting will attempt to correct inaccuracies in the positioning of the read regardless of whether the CD reported an error or not. If you receive errors, try increasing the overlap a little; this will increase the size of the buffer that is used to align the read, and so increases the chances for successful alignment.
Q: Can I get the source code to CD-DA X-Tractor?
A: Yes. And you don't even have to say "pretty please"... CD-DA X-Tractor is released under the GNU Public License, and as such comes with full source code. The source code is currently located at xtractor.sourceforge.net. The ripping code itself is encapsulated in akrip32.dll, which has been moved into its own project at akrip.sourceforge.net. The source code to the DLL is included in the source distribution for CD-DA X-Tractor. Although written in C, the DLL functions can be called from other Windows programming environments -- an interface for Delphi is currently available.
Q: Open Source is great! How can I help?
A: Just send your changes, or even your ideas for changes to users.sourceforge.net.


Credits

  • Main icon and logo in the "About" dialog by Liquid Dust
  • Main program executable packed by UPX
  • Vorb_Enc.dll is linked against libvorbis and vorbisfile from www.xiph.org


Menu Items

File
Refresh CD | Rereads the TOC of the CD in the drive. Equivalent to clicking on the "Refresh" button on the toolbar.
Rip Tracks | Begins ripping the tracks marked with a check mark.
Rip Segment | Rips a custom segment of the disk. Used to rip just a part of a track or several tracks as if they were one.
Exit | Exits the program.

Edit
Rename | Renames the currently selected (hilighted in blue) track.
Select All | Places a check mark next to all tracks.
Invert Selection | Checks all unchecked tracks, and unchecks all checked tracks.

Options
CD Settings | Brings up the CD options dialog. Used to select the CD unit to use, and jitter correction options.
Output Options | Brings up the Output Options dialog. Used to select output directories and MP3/WAV output.
MP3 Settings | Brings up the MP3 settings dialog. This is where to set the MP3 bitrate, and enable CRC generation and ID3 tagging.
CDDB Settings | Brings up the CDDB Settings dialog. This is where to configure the CDDB server and CGI, plus HTTP proxy settings.
Edit ID3 Tag | Brings up a dialog to allow editing of the ID3 tagging information.
Hicolor Buttons | Selects the nicer-looking 24-bit color buttons for the toolbar

Tools
Enable ID3 | An alternate place to enable ID3 tagging. If this menu item is checked, then ID3 tagging is enabled.
Enable CDDB | When checked, each time the Refresh button is pressed, it will attempt to query the CDDB database. See CDDB Settings.

Help
About CD-DA X-Tractor | About dialog. Lists current version of CD-DA X-Tractor, plus version of BladeEnc, if installed.
Topics | Loads the HTML help files into the default browser for your system.


Toolbar

Toolbar Buttons

Refresh | Rescans the TOC of the currently loaded CD
Rip | Begins ripping all tracks marked with a check mark.
Options | Brings up the options dialog.
ID3 | Edit ID3 tag information.
Artist | Edit the Artist's name. Included in the ID3 tag.
Album | Edit the Album title. Included in the ID3 tag.


CD Options

Drive | Selects the CD-rom unit to use.
Read Algorithm | Selects the read algorithm used by the program. Most users will want to leave this on Autodetect. If you are unable to rip tracks using autodetect, or if the sound is garbled, experiment and try the other settings for the read algorithm.
Autoscan TOC | When checked, the program will automatically scan the CD in the default drive when the program is started.
Autocheck tracks | When checked, the program will automatically check all tracks after an automatic scan of the TOC or after pressing the "Refresh" button.
Jitter Correction | When set to "Always", the program will always attempt to align the output file by using overlapped reads. For "On Error", it will attempt jitter correction only after an error is reported by the CD. "Never" disables jitter correction. "On Error" gives almost as good results as "Always", and is much faster, since the drive has to seek after every read when in "Always" mode.
Read Tracks | Maximum number of frames that will be read at once. Some drives can handle larger values, but some can't handle more than 27.
Jitter Check | When using overlapped reads (for Jitter correction modes "always" and "on error"), this is the number of frames that the program will attempt to match.
Overlap | When performing jitter correction, this is the number of frames that will be overlapped. Overlap must be at least two greater than the value used for Jitter Check.
Reset | Resets the Jitter Correction configuration to default values.


Output Options

Output Folder | The folder where output files will be created
Browse | Clicking on the Browse button allows you to select the directory that output files will be created in.
Encoder | Selects the encoder and output format to use. Currently supported encoders are Lame_Enc.dll, BladeEnc.dll, and Vorb_Enc.dll. You may also select output to WAV files and raw data.


MP3 Options

General Options:
Bitrate | Selects the constant bitrate for the MP3 file in kbit/sec. Note: when using VBR(Variable Bit Rate) under LAME_ENC, this represents the minimum bitrate.
Enable ID3 Tags | When checked, an ID3v1 tag will be added to the MP3 file. If no ID3 information was input for the current CD in the drive, no tag will be written,even if the item is checked.
Generate CRC | When checked, a CRC will be generated for each MP3 frame.
Original | Sets the "Original" flag in the MP3 file.
Copyright | Sets the Copyright flag in the MP3 file.
Private | Sets the Private flag in the MP3 file.

Lame Encoder Options:
VBR Quality | A value from 0 to 9. While 0 represents the highest quality, it increases the overall encoding time. According to the LAME documentation, for the highest quality files, values for VBR Quality should be 4 or less.
VBR Max. Bitrate | The maximum bitrate used when VBR is enabled.
MPEG Quality | The overall quality of the MP3 file: Normal, Low, High, Voice
Enable VBR | When checked, the VBR (Variable Bit Rate) option is enabled.
Write VBR Header | Causes the VBR header to be written to the MP3 file. When using VBR, this header will allow MP3 players to determine the proper length of the file.


Vorbis Options

Ogg Vorbis is a new, open-source, lossy audio codec similar in quality and compression to MP3. However, unlike MP3 it is not emcumbered by patent issues. This means that it can be included in a freeware product without having to obtain a costly license. Also, unlike MP3, it is inherently VBR, so the encoder only uses the amount of bits it needs, resulting in smaller files of the same quality. Vorb_enc.dll, which is included in this distribution, is based on the libraries from xiph.org.

VBR Bitrate | The bitrate with which to encode. Vorbis is inherently VBR(variable bitrate), and the bitrate that you select will be an ideal average.
Version | Used to designate multiple versions of same track. Stored in the Vorbis comment header.
Description | Short description of track's contents
Genre | The overall genre (if any) that the music belongs to
Date | Date the track was recorded
Location | Where the track was recorded
Copyright | Copyright info for the track


Freedb Options

CD-DA X-Tractor is capable of querying the Freedb database and other databases based on the original CDDB protocol on the Internet to automatically fill in the artist name, album title and the titles of all of the songs. To use this feature, make sure that "Enable Freedb" is checked on the Tools menu.

CDDB Server | Address of the Freedb server to use.
CGI Script | This should contain the relative address of the CGI used for submitting CDDB queries on the server. Usually "/~cddb/cddb.cgi".
Get List | Gets the available server list from the currently configured CDDB server. Note: If you change the Freedb server, you must click on "Apply" before you can use the "Get List" button.
Reset List | Resets the list of available servers to "freedb.freedb.org". Does not reset the configured server.
Use Proxy | If you are located behind a firewall and need to connect through an HTTP proxy, check this box.
Proxy Server | Address of the proxy server. Contact your system administrator for this information.
Proxy Port | Port on which to contact the proxy server. Contact your system administrator for this information.


Misc Options

M3U Playlist
Enabled | When checked, an M3U playlist file (used by WinAmp) will be generated containing all of the tracks extracted.
Use Album Name As Filename | When selected, the M3U file will use the album name as it's filename, with the .M3U extension, in the same directory as the files being extracted.
Specify Filename | When selected, you can specify the file to use for M3U files.

Filename Macros

You can specify how the output files will be named. The mechanism works thusly:
  1. If a macro is entered in the provided edit box, it will be used. "$T" will be replaced with the track number, "$N" with the track name, "$A" with the artist, and "$L" with the album title. Note: if an item is not supplied, it will be simply be skipped, so you must ensure that all items are supplied.
  2. If no macro is supplied, but the file has been renamed (either by CDDB or manually), that name will be used
  3. Otherwise the track will be named "Track x.ext", where x is the track number and .ext is the extension for the configured output format.


ID3 Tags

ID3 Tagging

ID3 tagging is a method of including information about the artist's name, album title, song title, year and genre directly in an MP3 file. Currently, only ID3v1 is supported, since most MP3 players support it. ID3v2 is still under development and will be enabled in future releases after the format is finalized. For more information on ID3, you can visit www.id3.org. The "ID3 Info" dialog is available either by pressing the ID3 button on the toolbar, or by selecting the "Options->Edit ID3 Tag" menu item.

Artist | Enter the name of the artist here
Album | Enter the name of the album here
Year | The year in which the track was recorded
Genre | The genre that the track best fits into
Enable ID3 Tags | When checked, an ID3 tag will be generated for MP3 files. If the artist or album name are not filled in, no MP3 tag will be generated, regardless of the state of this checkbox.


Rip Custom Segment

Ripping a Custom Segment

If you need to rip just a portion of one or more track, or to combine one or more tracks, click on "File->Rip Segment" to bring up the Rip Segment dialog.

The top slider represents the start frame for the segment to rip, and the bottom slider represents the end frame. You can "snap" the sliders to the beginning of the current or next track by clicking directly to the left or to the right of the slider. You can manually enter the start/end frames -- the length of the currently selected segment is shown in (minute:second:frame) format. A frame is 1/75 of a second. It also indicates where the selected segment starts and ends relative to the start of tracks. In the example above, it is set to rip tracks 2 and 3 as one contiguous segment -- the overall length of the segment is 42923 frames, or 9 minutes, 32 seconds and 23 frames (or about 0.31 sec.).

In the example above, it will rip 10 seconds starting at the beginning of track 2.


License

CD-DA X-Tractor License

CD-DA X-Tractor is covered by the Gnu Public License, which is reproduced below. Further information on the license can be found at the Free Software Foundation.

            GNU GENERAL PUBLIC LICENSE
               Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

            GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

                NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

             END OF TERMS AND CONDITIONS

        How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    Copyright (C) 19yy

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) 19yy name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  , 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Library General
Public License instead of this License.